home *** CD-ROM | disk | FTP | other *** search
/ All for Cell Phones: Sony Ericsson / Sony-Ericsson 2004.iso / Java / cellhtml / CellHtml.jar / GifDecoder.class (.txt) < prev    next >
Encoding:
Java Class File  |  2001-09-20  |  6.1 KB  |  500 lines

  1. import java.io.InputStream;
  2. import javax.microedition.lcdui.Graphics;
  3. import javax.microedition.lcdui.Image;
  4.  
  5. class GifDecoder {
  6.    // $FF: renamed from: ├¢ int
  7.    private int field_0 = -1;
  8.    // $FF: renamed from: ├£ int[]
  9.    private int[] field_1 = new int[280];
  10.    // $FF: renamed from: ├¥ int
  11.    private int field_2 = -1;
  12.    // $FF: renamed from: ├₧ int
  13.    private int field_3 = 0;
  14.    // $FF: renamed from: ├ƒ int
  15.    private int field_4 = 0;
  16.    // $FF: renamed from: ├á int
  17.    private int field_5 = 0;
  18.    // $FF: renamed from: ├í int
  19.    private int field_6 = 0;
  20.    // $FF: renamed from: ├ó boolean
  21.    private boolean field_7 = false;
  22.    // $FF: renamed from: ├ú int[]
  23.    private int[] field_8 = null;
  24.    // $FF: renamed from: ├ñ int
  25.    private int field_9 = 0;
  26.    // $FF: renamed from: ├Ñ int
  27.    private int field_10 = 0;
  28.    // $FF: renamed from: ├ª int
  29.    private int field_11 = 0;
  30.    // $FF: renamed from: ├º int
  31.    private int field_12 = 0;
  32.    // $FF: renamed from: ├¿ int
  33.    private int field_13 = 0;
  34.    // $FF: renamed from: ├⌐ boolean
  35.    private boolean field_14 = false;
  36.    // $FF: renamed from: ├¬ boolean
  37.    private boolean field_15 = false;
  38.    // $FF: renamed from: ├½ int[]
  39.    private int[] field_16 = null;
  40.    // $FF: renamed from: ├¼ int
  41.    private int field_17 = 0;
  42.    // $FF: renamed from: ├¡ boolean
  43.    private boolean field_18;
  44.    // $FF: renamed from: ├« int
  45.    private int field_19;
  46.    // $FF: renamed from: ├» long
  47.    private long field_20;
  48.    // $FF: renamed from: ├░ int
  49.    private int field_21 = 0;
  50.    // $FF: renamed from: ├▒ int[]
  51.    private static final int[] field_22 = new int[]{8, 8, 4, 2};
  52.    // $FF: renamed from: ├▓ int[]
  53.    private static final int[] field_23 = new int[]{0, 4, 2, 1};
  54.    // $FF: renamed from: ├│ int
  55.    int field_24 = 0;
  56.    // $FF: renamed from: ├┤ int
  57.    int field_25;
  58.    // $FF: renamed from: ├╡ int
  59.    int field_26;
  60.    // $FF: renamed from: ├é byte[]
  61.    byte[] field_27;
  62.    // $FF: renamed from: ├╢ int
  63.    int field_28;
  64.    // $FF: renamed from: ├╕ int
  65.    int field_29;
  66.    // $FF: renamed from: ├╣ int
  67.    int field_30;
  68.  
  69.    public GifDecoder(byte[] var1) {
  70.       this.field_27 = var1;
  71.       this.field_25 = this.field_27.length;
  72.       this.field_26 = 0;
  73.    }
  74.  
  75.    public GifDecoder(InputStream var1) {
  76.       byte[][] var2 = new byte[32][1];
  77.       int var3 = 0;
  78.       int var4 = 0;
  79.  
  80.       while(true) {
  81.          var2[var3] = new byte[1024];
  82.  
  83.          try {
  84.             var4 = var1.read(var2[var3]);
  85.          } catch (Exception var8) {
  86.             var4 = 0;
  87.          }
  88.  
  89.          this.field_25 += var4;
  90.          if (var4 != 1024) {
  91.             this.field_27 = new byte[this.field_25];
  92.             this.field_26 = 0;
  93.             int var5 = 0;
  94.             int var6 = 0;
  95.  
  96.             for(int var7 = 0; var7 <= var3; ++var7) {
  97.                if (var7 == var3) {
  98.                   var6 = var4;
  99.                } else {
  100.                   var6 = 1024;
  101.                }
  102.  
  103.                System.arraycopy(var2[var7], 0, this.field_27, var5, var6);
  104.                var5 += var6;
  105.             }
  106.  
  107.             return;
  108.          }
  109.  
  110.          ++var3;
  111.       }
  112.    }
  113.  
  114.    public boolean moreFrames() {
  115.       return this.field_25 - this.field_26 >= 16;
  116.    }
  117.  
  118.    public void nextFrame() {
  119.       ++this.field_24;
  120.    }
  121.  
  122.    public Image decodeImage() {
  123.       return this.decodeImage(this.field_24);
  124.    }
  125.  
  126.    public Image decodeImage(int var1) {
  127.       Object var2 = null;
  128.       if (var1 <= this.field_0) {
  129.          return null;
  130.       } else {
  131.          if (this.field_0 < 0) {
  132.             if (!this.method_3()) {
  133.                return null;
  134.             }
  135.  
  136.             if (!this.method_4()) {
  137.                return null;
  138.             }
  139.          }
  140.  
  141.          while(this.method_9(1)) {
  142.             int var3 = this.field_1[0];
  143.             if (var3 == 59) {
  144.                return null;
  145.             }
  146.  
  147.             if (var3 == 33) {
  148.                if (!this.method_7()) {
  149.                   return null;
  150.                }
  151.             } else if (var3 == 44) {
  152.                if (!this.method_5()) {
  153.                   return null;
  154.                }
  155.  
  156.                Image var4 = this.method_0();
  157.                ++this.field_0;
  158.                if (this.field_0 >= var1) {
  159.                   return var4;
  160.                }
  161.  
  162.                Object var5 = null;
  163.             }
  164.          }
  165.  
  166.          return null;
  167.       }
  168.    }
  169.  
  170.    public void clear() {
  171.       this.field_27 = null;
  172.       this.field_1 = null;
  173.       this.field_8 = null;
  174.       this.field_16 = null;
  175.    }
  176.  
  177.    // $FF: renamed from: ├¢ () javax.microedition.lcdui.Image
  178.    private Image method_0() {
  179.       int var1 = this.field_11;
  180.       int var2 = this.field_12;
  181.       int var5 = 0;
  182.       int var6 = 0;
  183.       int var7 = 0;
  184.       int[] var9 = new int[4096];
  185.       int[] var10 = new int[4096];
  186.       int[] var11 = new int[8192];
  187.       if (!this.method_9(1)) {
  188.          return null;
  189.       } else {
  190.          int var3 = this.field_1[0];
  191.          Image var21 = Image.createImage(var1, var2);
  192.          Graphics var22 = var21.getGraphics();
  193.          int[] var23 = this.field_8;
  194.          if (this.field_14) {
  195.             var23 = this.field_16;
  196.          }
  197.  
  198.          if (this.field_2 >= 0) {
  199.             var23[this.field_2] = VirtualGraphics.bgcolor;
  200.          }
  201.  
  202.          int var14 = 1 << var3;
  203.          int var16 = var14 + 1;
  204.          int var13 = var3 + 1;
  205.          int var18 = var14 + 2;
  206.          int var17 = -1;
  207.          int var20 = -1;
  208.  
  209.          for(int var8 = 0; var8 < var14; var10[var8] = var8++) {
  210.          }
  211.  
  212.          int var12 = 0;
  213.          this.method_2();
  214.          var6 = 0;
  215.  
  216.          for(int var26 = 0; var26 < var2; ++var26) {
  217.             var5 = 0;
  218.  
  219.             while(var5 < var1) {
  220.                if (var12 == 0) {
  221.                   int var19 = this.method_1(var13);
  222.                   if (var19 < 0) {
  223.                      return var21;
  224.                   }
  225.  
  226.                   if (var19 > var18 || var19 == var16) {
  227.                      return var21;
  228.                   }
  229.  
  230.                   if (var19 == var14) {
  231.                      var13 = var3 + 1;
  232.                      var18 = var14 + 2;
  233.                      var17 = -1;
  234.                      continue;
  235.                   }
  236.  
  237.                   if (var17 == -1) {
  238.                      var11[var12++] = var10[var19];
  239.                      var17 = var19;
  240.                      var20 = var19;
  241.                      continue;
  242.                   }
  243.  
  244.                   int var15 = var19;
  245.                   if (var19 == var18) {
  246.                      var11[var12++] = var20;
  247.                      var19 = var17;
  248.                   }
  249.  
  250.                   while(var19 > var14) {
  251.                      var11[var12++] = var10[var19];
  252.                      var19 = var9[var19];
  253.                   }
  254.  
  255.                   var20 = var10[var19];
  256.                   if (var18 >= 4096) {
  257.                      return var21;
  258.                   }
  259.  
  260.                   var11[var12++] = var20;
  261.                   var9[var18] = var17;
  262.                   var10[var18] = var20;
  263.                   ++var18;
  264.                   if (var18 >= 1 << var13 && var18 < 4096) {
  265.                      ++var13;
  266.                   }
  267.  
  268.                   var17 = var15;
  269.                }
  270.  
  271.                --var12;
  272.                int var4 = var11[var12];
  273.                if (var4 < 0) {
  274.                   return var21;
  275.                }
  276.  
  277.                if (var5 == 0) {
  278.                   this.field_29 = 0;
  279.                   this.field_28 = var23[var4];
  280.                   this.field_30 = 0;
  281.                } else if (this.field_28 != var23[var4]) {
  282.                   var22.setColor(this.field_28);
  283.                   var22.drawLine(this.field_30, var6, this.field_30 + this.field_29, var6);
  284.                   this.field_29 = 0;
  285.                   this.field_28 = var23[var4];
  286.                   this.field_30 = var5;
  287.                   if (var5 == var1 - 1) {
  288.                      var22.setColor(var23[var4]);
  289.                      var22.drawLine(var5, var6, var5, var6);
  290.                   }
  291.                } else {
  292.                   ++this.field_29;
  293.                   if (var5 == var1 - 1) {
  294.                      var22.setColor(this.field_28);
  295.                      var22.drawLine(this.field_30, var6, this.field_30 + this.field_29, var6);
  296.                   }
  297.                }
  298.  
  299.                ++var5;
  300.             }
  301.  
  302.             if (this.field_15) {
  303.                for(var6 += field_22[var7]; var6 >= var2; var6 = field_23[var7]) {
  304.                   ++var7;
  305.                   if (var7 > 3) {
  306.                      return var21;
  307.                   }
  308.                }
  309.             } else {
  310.                ++var6;
  311.             }
  312.          }
  313.  
  314.          return var21;
  315.       }
  316.    }
  317.  
  318.    // $FF: renamed from: ├£ (int) int
  319.    private int method_1(int var1) {
  320.       while(true) {
  321.          label21: {
  322.             if (this.field_21 < var1) {
  323.                if (this.field_18) {
  324.                   return -1;
  325.                }
  326.  
  327.                if (this.field_17 != 0) {
  328.                   break label21;
  329.                }
  330.  
  331.                this.field_17 = this.method_8();
  332.                this.field_19 = 0;
  333.                if (this.field_17 > 0) {
  334.                   break label21;
  335.                }
  336.  
  337.                this.field_18 = true;
  338.             }
  339.  
  340.             int var2 = (int)this.field_20 & (1 << var1) - 1;
  341.             this.field_20 >>= var1;
  342.             this.field_21 -= var1;
  343.             return var2;
  344.          }
  345.  
  346.          this.field_20 += (long)(this.field_1[this.field_19] << this.field_21);
  347.          ++this.field_19;
  348.          this.field_21 += 8;
  349.          --this.field_17;
  350.       }
  351.    }
  352.  
  353.    // $FF: renamed from: ├¥ () void
  354.    private void method_2() {
  355.       this.field_21 = 0;
  356.       this.field_17 = 0;
  357.       this.field_20 = 0L;
  358.       this.field_18 = false;
  359.       this.field_19 = -1;
  360.    }
  361.  
  362.    // $FF: renamed from: ├₧ () boolean
  363.    private boolean method_3() {
  364.       if (!this.method_9(6)) {
  365.          return false;
  366.       } else {
  367.          return this.field_1[0] == 71 && this.field_1[1] == 73 && this.field_1[2] == 70 && this.field_1[3] == 56 && (this.field_1[4] == 55 || this.field_1[4] == 57) && this.field_1[5] == 97;
  368.       }
  369.    }
  370.  
  371.    // $FF: renamed from: ├ƒ () boolean
  372.    private boolean method_4() {
  373.       if (!this.method_9(7)) {
  374.          return false;
  375.       } else {
  376.          this.field_3 = method_10(this.field_1[0], this.field_1[1]);
  377.          this.field_4 = method_10(this.field_1[2], this.field_1[3]);
  378.          int var1 = this.field_1[4];
  379.          this.field_5 = this.field_1[5];
  380.          int var2 = this.field_1[6];
  381.          this.field_6 = 2 << (var1 & 7);
  382.          this.field_7 = method_11(var1, 128);
  383.          this.field_8 = null;
  384.          return !this.field_7 || this.method_6(this.field_6, true);
  385.       }
  386.    }
  387.  
  388.    // $FF: renamed from: ├á () boolean
  389.    private boolean method_5() {
  390.       if (!this.method_9(9)) {
  391.          return false;
  392.       } else {
  393.          this.field_9 = method_10(this.field_1[0], this.field_1[1]);
  394.          this.field_10 = method_10(this.field_1[2], this.field_1[3]);
  395.          this.field_11 = method_10(this.field_1[4], this.field_1[5]);
  396.          this.field_12 = method_10(this.field_1[6], this.field_1[7]);
  397.          int var1 = this.field_1[8];
  398.          this.field_14 = method_11(var1, 128);
  399.          this.field_13 = 2 << (var1 & 7);
  400.          this.field_15 = method_11(var1, 64);
  401.          this.field_16 = null;
  402.          return !this.field_14 || this.method_6(this.field_13, false);
  403.       }
  404.    }
  405.  
  406.    // $FF: renamed from: ├í (int, boolean) boolean
  407.    private boolean method_6(int var1, boolean var2) {
  408.       int[] var3 = new int[var1];
  409.  
  410.       for(int var4 = 0; var4 < var1; ++var4) {
  411.          if (!this.method_9(3)) {
  412.             return false;
  413.          }
  414.  
  415.          var3[var4] = this.field_1[0] << 16 | this.field_1[1] << 8 | this.field_1[2] | -16777216;
  416.       }
  417.  
  418.       if (var2) {
  419.          this.field_8 = var3;
  420.       } else {
  421.          this.field_16 = var3;
  422.       }
  423.  
  424.       return true;
  425.    }
  426.  
  427.    // $FF: renamed from: ├ó () boolean
  428.    private boolean method_7() {
  429.       if (!this.method_9(1)) {
  430.          return false;
  431.       } else {
  432.          int var1 = this.field_1[0];
  433.          int var2 = -1;
  434.          switch (var1) {
  435.             case 1:
  436.             case 254:
  437.             case 255:
  438.             default:
  439.                break;
  440.             case 249:
  441.                var2 = this.method_8();
  442.                if (var2 < 0) {
  443.                   return true;
  444.                }
  445.  
  446.                if ((this.field_1[0] & 1) != 0) {
  447.                   this.field_2 = this.field_1[3];
  448.                } else {
  449.                   this.field_2 = -1;
  450.                }
  451.          }
  452.  
  453.          do {
  454.             var2 = this.method_8();
  455.          } while(var2 > 0);
  456.  
  457.          return true;
  458.       }
  459.    }
  460.  
  461.    // $FF: renamed from: ├ú () int
  462.    private int method_8() {
  463.       if (!this.method_9(1)) {
  464.          return -1;
  465.       } else {
  466.          int var1 = this.field_1[0];
  467.          return var1 != 0 && !this.method_9(var1) ? -1 : var1;
  468.       }
  469.    }
  470.  
  471.    // $FF: renamed from: ├ñ (int) boolean
  472.    private boolean method_9(int var1) {
  473.       if (this.field_26 + var1 >= this.field_25) {
  474.          return false;
  475.       } else {
  476.          for(int var2 = 0; var2 < var1; ++var2) {
  477.             int var3 = this.field_27[this.field_26 + var2];
  478.             if (var3 < 0) {
  479.                var3 += 256;
  480.             }
  481.  
  482.             this.field_1[var2] = var3;
  483.          }
  484.  
  485.          this.field_26 += var1;
  486.          return true;
  487.       }
  488.    }
  489.  
  490.    // $FF: renamed from: ├Ñ (int, int) int
  491.    private static final int method_10(int var0, int var1) {
  492.       return var1 << 8 | var0;
  493.    }
  494.  
  495.    // $FF: renamed from: ├ª (int, int) boolean
  496.    private static final boolean method_11(int var0, int var1) {
  497.       return (var0 & var1) == var1;
  498.    }
  499. }
  500.